package com.rocketmq;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.junit.Test;

import java.nio.charset.StandardCharsets;

/**
 * 模拟消息发送者 组织一个消息对象发送到rocketmq
 */
public class MyProducer {
    @Test
    public void send()throws Exception{
        //1. 连接namesrv localhost:9876 生产者连接对象
        DefaultMQProducer producer=new DefaultMQProducer();
        producer.setNamesrvAddr("localhost:9876");
        //在rocketmq 生产者和消费者进程不止有一个,生产分组和消费分组
        producer.setProducerGroup("test-product-01");
        //建立底层连接 非常消耗资源的.而且是异步,可能导致 发送消息代码运行时,连接还没创建
        producer.start();
        Thread.sleep(1000);
        //2. 组织一个消息对象
        Message message = new Message();
        // 消息体 携带的信息
        String msgTxt = "this is my first message 第一条消息";
        message.setBody(msgTxt.getBytes(StandardCharsets.UTF_8));
        //消息主题,消息队列的名称 rocketmq默认逻辑是: 没有个主题，自动创建
        message.setTopic("test-topic-01");
        //当前消息绑定业务
        String orderSn = "20231202";
        message.setKeys(orderSn);
        // 发送消息，携带标签tags
        message.setTags("生单");
        //3. 将消息发送给rocketmq rocketmq反馈成功发送和失败发送
        //for (int i = 0; i < 100; i++) {
            SendResult result = producer.send(message);
            //result 包含当前发送消息的结果信息
            System.out.println("当前发送结果:"+result.getSendStatus());
        //}
        //4. 释放连接
        producer.shutdown();
    }
}
